인증과 인가
쿠버네티스에서 인증(Authentication)은 사용자나 서비스의 신원을 확인하는 과정이며, 인가(Authorization)는 인증된 사용자가 어떤 작업을 수행할 수 있는지 결정하는 과정입니다.
인증 메커니즘
- X.509 인증서: TLS 클라이언트 인증서를 통한 인증
- 서비스 계정 토큰: Pod가 API 서버와 통신할 때 사용
- OpenID Connect: OAuth2 기반 외부 ID 제공자 연동
- Webhook 토큰 인증: 외부 인증 서비스 활용
- 정적 토큰 파일 또는 정적 비밀번호 파일(권장되지 않음)
인증서 관리
인증서 생성 예시
# 개인 키 생성
openssl genrsa -out developer.key 2048
# CSR(Certificate Signing Request) 생성
openssl req -new -key developer.key -out developer.csr -subj "/CN=developer/O=development"
# 쿠버네티스 CA로 인증서 서명
sudo openssl x509 -req -in developer.csr \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-out developer.crt -days 365
인증서 확인
# 인증서 내용 확인
openssl x509 -in developer.crt -text -noout
# 클러스터 인증서 만료일 확인
kubeadm certs check-expiration
kubeconfig 파일 구성
kubeconfig 파일은 클러스터, 사용자, 컨텍스트 정보를 포함하여 kubectl이 API 서버와 통신하는 방법을 정의합니다.
kubeconfig 구조
apiVersion: v1
kind: Config
clusters:
- name: kubernetes
cluster:
server: https://kubernetes.example.com:6443
certificate-authority-data: BASE64_ENCODED_CA_CERT
users:
- name: developer
user:
client-certificate-data: BASE64_ENCODED_CLIENT_CERT
client-key-data: BASE64_ENCODED_CLIENT_KEY
contexts:
- name: developer@kubernetes
context:
cluster: kubernetes
user: developer
namespace: development
current-context: developer@kubernetes
kubeconfig 관리 명령어
# 현재 컨텍스트 확인
kubectl config current-context
# 컨텍스트 변경
kubectl config use-context developer@kubernetes
# 새 클러스터 추가
kubectl config set-cluster production --server=https://k8s-prod.example.com:6443
# 새 사용자 추가
kubectl config set-credentials developer --client-certificate=developer.crt --client-key=developer.key
# 새 컨텍스트 추가
kubectl config set-context dev --cluster=kubernetes --user=developer --namespace=development
인가 (RBAC)
Role-Based Access Control(RBAC)은 쿠버네티스에서 가장 일반적인 인가 메커니즘으로, 역할과 권한 바인딩을 통해 세밀한 접근 제어를 제공합니다.
RBAC 구성 요소
- Role/ClusterRole: 특정 리소스에 대한 권한 정의
- RoleBinding/ClusterRoleBinding: 역할을 사용자, 그룹 또는 서비스 계정에 연결